<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */


/**
 * Smarty {pp_inputcheckboxlist} function plugin
 *
 * File:       function.pp_inputcheckboxlist.php<br>
 * Type:       function<br>
 * Name:       pp_inputcheckboxlist<br>
 * Date:       24.Feb.2003<br>
 * Purpose:    Prints out a list of checkbox input types<br>
 * Input:<br>
 *           - name       (optional) - string default "checkbox"
 *           - values     (required) - array
 *           - options    (optional) - associative array
 *           - checked    (optional) - array default not set
 *           - separator  (optional) - ie <br> or &nbsp;
 *           - output     (optional) - the output next to each checkbox
 *           - assign     (optional) - assign the output as an array to this variable
 * Examples:
 * <pre>
 * {pp_inputcheckboxlist values=$ids output=$names}
 * {pp_inputcheckboxlist values=$ids name='box' separator='<br>' output=$names}
 * {pp_inputcheckboxlist values=$ids checked=$checked separator='<br>' output=$names}
 * </pre>
 * @link http://smarty.php.net/manual/en/language.function.html.inputcheckboxlist.php {pp_inputcheckboxlist}
 *      (Smarty online manual)
 * @author     Christopher Kvarme <christopher.kvarme@flashjab.com>
 * @author credits to Monte Ohrt <monte at ohrt dot com>
 * @version    1.0
 * @param array
 * @param Smarty
 * @return string
 * @uses smarty_function_escape_special_chars()
 */
function smarty_function_pp_inputcheckboxlist($params, &$smarty)
{
    require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');

    $name = 'checkbox';
    $values = null;
    $options = null;
    $selected = null;
    $separator = '';
    $labels = false;
    $output = null;

    $extra = '';
	
	$style = '';
    $custom = '';

    foreach($params as $_key => $_val) {
        switch($_key) {
            case 'name':
            case 'separator':
                $$_key = $_val;
                break;

            case 'labels':
                $$_key = (bool)$_val;
                break;

            case 'options':
                //$$_key = (array)$_val;
				if( $_val == 'YES/NO' ) {
					$$_key = array('1' => 'Yes', '0' => 'No');
				} elseif( $_val == 'card_month' || $_val == 'card_year' ) {
					$custom = $_val;
				} elseif( substr($_val, 0, 1) == '[' && substr($_val, -1) == ']' ) {
					$bb = explode("|", substr($_val, 1, -1));
					$bc = array();
					foreach($bb as $k => $v) {
						if( strpos($v, "=") === false ) {
							$bc[] = $v;	
						} else {
							$vs = explode("=", $v);
							$bc[$vs['1']] = $vs['0'];
						}
					}
					$$_key = $bc;
				} else {
					$$_key = (array)$_val;
				}
                break;

            case 'values':
            case 'output':
                //$$_key = array_values((array)$_val);
				if( $_val == 'YES/NO' ) {
					$$_key = array('Yes', 'No');
				} elseif( substr($_val, 0, 1) == '[' && substr($_val, -1) == ']' ) {
					$bb = explode("|", substr($_val, 1, -1));
					foreach($bb as $k => $v) {
						$vs = explode("=", $v);
						d($vs);
						$$_key[$vs['1']] = $vs['0'];
					}
				} else {
					$$_key = array_values((array)$_val);
				}
                break;
                break;

            case 'checked':
            case 'selected':
                $selected = array_map('strval', array_values((array)$_val));
                break;

            case 'inputcheckboxlist':
                $smarty->trigger_error('pp_inputcheckboxlist: the use of the "inputcheckboxlist" attribute is deprecated, use "options" instead', E_USER_WARNING);
                $options = (array)$_val;
                break;

            case 'assign':
                break;
				
            case 'eid':
                $$_key = (string)$_val;
                break;
				
            case 'style':
                $$_key = (string)$_val;
                break;
				
			case 'custom':
				$$_key = (string)$_val;
				break;

            default:
                if(!is_array($_val)) {
                    $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
                } else {
                    $smarty->trigger_error("pp_inputcheckboxlist: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
                }
                break;
        }
    }
	
	//
	if( $style == 'text' ) {
		//$custom = stripslashes($custom);
		$options = explode('\n', $custom);
		$optionsb = array();
		foreach($options as $k => $v) {
			if( strlen($v) > 0 ) {
				$optionsb[$v] = $v;
			}
		}
		$options = $optionsb;
		unset($optionsb);
	}
	
	//
    if (!isset($options) && !isset($values))
        return ''; /* raise error here? */
	
	//
	if( isset($eid) ) {
		//if( isset($_REQUEST[$name]) ) {
		//	$value = (string)$_REQUEST[$name];
		//}
		if( strstr($name, '[]') === false ) {
			if( isset($_REQUEST[$name]) ) {
				$value = (string)$_REQUEST[$name];
			}
		} else {
			$nameb = str_replace('[]', '', $name);
			$name = str_replace('[]', '[a' . $eid . ']', $name);
			if( isset($_REQUEST[$nameb]['a' . $eid]) ) {
				$value = (string)$_REQUEST[$nameb]['a' . $eid];
			}
		}
	} else {
		//if( isset($_REQUEST[$name]) ) {
		//	$value = (string)$_REQUEST[$name];
		//}
		if( strstr($name, '[]') === false ) {
			if( isset($_REQUEST[$name]) ) {
				$value = (string)$_REQUEST[$name];
			}
		} else {
			$nameb = str_replace('[]', '', $name);
			if( !isset($_REQUEST[$nameb . '_index']) ) {
				$_REQUEST[$nameb . '_index'] = 0;
			}
			if( isset($_REQUEST[$nameb][$_REQUEST[$nameb . '_index']]) ) {
				$value = (string)$_REQUEST[$nameb][$_REQUEST[$nameb . '_index']];
			}
			$_REQUEST[$nameb . '_index']++;
		}
	}
	
	//
    settype($selected, 'array');
    $_html_result = array();

    if (isset($options)) {

        foreach ($options as $_key=>$_val)
            $_html_result[] = smarty_function_pp_inputcheckboxlist_output($name, $_key, $_val, $selected, $extra, $separator, $labels);


    } else {
        foreach ($values as $_i=>$_key) {
            $_val = isset($output[$_i]) ? $output[$_i] : '';
            $_html_result[] = smarty_function_pp_inputcheckboxlist_output($name, $_key, $_val, $selected, $extra, $separator, $labels);
        }

    }

    if(!empty($params['assign'])) {
        $smarty->assign($params['assign'], $_html_result);
    } else {
        return implode("\n",$_html_result);
    }

}

function smarty_function_pp_inputcheckboxlist_output($name, $value, $output, $selected, $extra, $separator, $labels) {
    $_output = '';
    if ($labels) $_output .= '<label>';
    $_output .= '<input type="checkbox" name="'
        . smarty_function_escape_special_chars($name) . '[]" value="'
        . smarty_function_escape_special_chars($value) . '"';

    if (in_array((string)$value, $selected)) {
        $_output .= ' checked="checked"';
    }
    $_output .= $extra . '>' . $output;
    if ($labels) $_output .= '</label>';
    $_output .=  $separator;

    return $_output;
}

?>
